#include<stdio.h> int ones(unsigned int n) { int m=n==0?0:1; while(n=(n&(n-1))) // 将整数n的二进制表示中最右侧的一个1置0 m++; return m; } int isBit1(int num, unsigned int indexBit) // 判断从右数起的indexBit位是不是1 { return (num&(1u<<indexBit))!=0; //num=num>>indexBit; //return num&1; // &1避免1做为符号 } int main() { int a=1; int b=32; printf("%d\n",a<<b); // a<<(b%32) 1 printf("%d\n",1<<32); // 0 int i=-1; printf("%d\n",i>>2); // -1 = 0xFFFFFFFF,移位后要按符号位补位,还是0xFFFFFFFF printf("%d\n",ones(-1)); printf("%d\n",isBit1(-1,3)); getchar(); return 0; }
本页共32段,616个字符,750 Byte(字节)